# -*- coding: utf-8 -*-
import scrapy
from scrapy import Request,FormRequest

class LoginSpider(scrapy.Spider):
    name = 'login'
    allowed_domains = ['xjtu.edu.cn']
    #start_urls = ['http://xjtu.edu.cn/'] #设置入口网址
    #伪装成浏览器需要用到的用户代理
    header = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0"}

    # 编写start_requests()方法，第一次会默认调取该方法中的请求
    def start_requests(self):   #没有这个方法的话，会默认首先从start_urls开始爬取；有这个方法之后，会取代start_urls，start_urls可以注释掉
        # 首先爬一次登录页，然后进入回调函数parse()

        # 首先爬取浏览器登陆界面看到的网址
        #"cookiejar": 1——cookie开启了
        # callback=self.parse——爬取的这一次，后面到当地交给谁处理
        return [Request("https://org.xjtu.edu.cn/openplatform/login.html", meta={"cookiejar": 1}, callback=self.parse)]



    def parse(self, response):#这里的response就是上一次返回过来的响应
        data = {
            "username": "lm810968734",
            "pwd": "15334183661lm"
            #"pwd": "eiFVtEc9/ABRMiC+NfVJ5A=="
            #可见输入真实密码就行，不需要解码加密之类的
        }
        print("登录中……")

        # 通过FormRequest.from_response()进行登陆,发送POST登录请求
        return [FormRequest.from_response(response,
                                          # 设置cookie信息
                                          meta={"cookiejar": response.meta["cookiejar"]},
                                          # 设置headers信息模拟成浏览器
                                          headers=self.header,
                                          # 设置post表单中的数据
                                          formdata=data,
                                          # 设置回调函数，此时回调函数为next()
                                          callback=self.next,
                                          )]

    #执行到next的时候，登录已经成功了，但是不一定访问你想要爬取（访问）的网页，所以需要在这里跳转
    def next(self,response):
        """
        如果我们想要爬取当前网页所有的信息和数据，使用response的body属性
        response不能直接用正则表达式去处理，因为他是一个响应（不是字符串），只能用XPath表达式处理
        """


        data=response.body  #当前访问的所有数据，data是字符串类型
        fh=open("C:\\Users\\DELL\\Desktop\\登陆成功的界面.html","wb")
        fh.write(data)
        fh.close()


        print("是不是登陆成功的页面？" + response.xpath("/html/head/title/text()").extract()[0])  #提取当前网页的标题

        #访问我的考试安排，嘻嘻嘻嘻！！！！
        yield Request("http://ehall.xjtu.edu.cn/jwapp/sys/studentWdksapApp/*default/index.do?amp_sec_version_=1#/wdksap",
                      callback=self.next2,meta={"cookiejar": True})
        #meta={"cookiejar": True}——保持登陆状态

    # next（）方法返回的响应，交给next2（）处理
    def next2(self,response):

        data=response.body
        fh = open("C:\\Users\\DELL\\Desktop\\我的考试安排.html", "wb")
        fh.write(data)
        fh.close()

        print("是不是我的考试安排？" + response.xpath('/html/head/meta[@name="renderer"]/@content').extract()[0])


"""
要爬哪个网址，先爬登陆界面
    查看是否有验证码
        有，处理
    登陆界面网址（抓包分析）
        向右的箭头
        一切以这个网址为基础：https://org.xjtu.edu.cn/openplatform/g/admin/login
"""


"""
问题1：登陆成功的页面是一个空页面
问题2：导致yield之后，没有响应，第二个回调函数没有执行
"""


